home *** CD-ROM | disk | FTP | other *** search
- /*
- RGB to HSV 変換関数
- おこめ
-
- col:24bitGRB
- ret h:(0,1535) s,v:(0,255)
-
- 参考:Oh!FM 1989.9 特集
- 爆走!! 趣味のC言語ライブラリ
- Part 6 あれやこれやの
- MISCライブラリ 歩野零一
- */
-
- void RGBtoHSV( int col, int *hh, int *ss, int *vv )
- {
- int r,g,b,rr,gg,bb, x,h,s,v,t ;
- /* 32k colors */
- /* r = (col >> 2) & 0xf8;
- g = (col >> 7) & 0xf8;
- b = (col << 3) & 0xf8; */
- /* full color */
- r = (col >> 8) & 0xff;
- g = (col >> 16) & 0xff;
- b = col & 0xff;
-
- v = _max( r, g, b );
- x = _min( r, g, b );
- t = v - x ;
- if ( v != 0 )
- s = t *255 /v ;
- else
- s = 0 ;
- if ( t != 0 ) {
- rr = ( v - r ) *255 /t ;
- gg = ( v - g ) *255 /t ;
- bb = ( v - b ) *255 /t ;
- } else {
- rr = gg = bb = 0 ;
- }
-
- if ( r == v )
- {
- if ( b == x )
- h = 256 - gg ;
- else
- h = 1280 + bb ;
- } else {
- if ( g == v )
- {
- if ( b == x )
- h = 256 + rr ;
- else
- h = 768 - bb ;
- } else {
- if ( r == x )
- h = 768 + gg ;
- else
- h = 1280 - rr ;
- }
- }
- h %= 1536 ; /* h = ( h * 60 ) /256 ; h %= 360 ; */
- *hh = h;
- *ss = s;
- *vv = v;
- }
-